package yl.hs.bmipfull.service.laboratory;

import org.apache.ibatis.annotations.Param;
import yl.hs.bmipfull.pojo.laboratory.ProductInfoEntity;
import yl.hs.bmipfull.service.IBaseService;
import yl.hs.bmipfull.viewmodels.PageQuery;
import yl.hs.bmipfull.viewmodels.PageResult;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 作用:  产品信息表服务层接口<br/>
 * 创建时间: 2021年05月22日 14时48分28秒 <br/>
 *
 * @author 吴高丰
 */

public interface IProductInfoService extends IBaseService {

    /**
     * 查询产品信息表信息
     *
     * @param pageQuery 查询条件 {@link PageQuery}
     * @return 产品信息表-List<{@link ProductInfoEntity}>
     * @throws Exception 查询参数异常
     */
    List<ProductInfoEntity> queryList(PageQuery pageQuery) throws Exception;

    /**
     * 查询产品信息表信息
     *
     * @param pageQuery 查询条件 {@link PageQuery}
     * @param rowNum    每页条数
     * @param page      页码
     * @return 站内信息-List-SiteMessageMainEntity
     * @throws Exception 查询条件异常
     */
    PageResult<ProductInfoEntity> queryPage(PageQuery pageQuery, int rowNum, int page) throws Exception;

    /**
     * 查询产品信息表信息
     *
     * @param tags 查询条件 {@link ProductInfoEntity}
     * @return 产品信息表-List<{@link ProductInfoEntity}>
     */
    List<ProductInfoEntity> queryByTags(@Param("tags") String tags);

    /**
     * 根据产品信息表编号查询产品信息表信息
     *
     * @param sn 编号
     * @return 产品信息表-{@link ProductInfoEntity}
     */
    ProductInfoEntity findBySn(String sn);

    /**
     * 保存产品信息表信息
     *
     * @param model 产品信息表表单信息
     * @param sn    产品信息表信息原有编号
     * @return 执行结果-受影响行数-Integer
     * @throws Exception 保存异常
     */
    Integer saveProductInfo(Map<String, Object> model, String sn) throws Exception;

    /**
     * 根据产品信息表编号删除产品信息表信息
     *
     * @param sn 产品信息表编号
     * @return 影响行数
     */
    Integer delete(String[] sn);

    /**
     * 根据产品类别编号查询产品信息
     *
     * @param cateSn 产品类别编号
     * @return 产品信息-List<{@link ProductInfoEntity}>
     */
    List<ProductInfoEntity> queryByCateSn(String cateSn);

    /**
     * 获取产品容重
     *
     * @param contractSn 合同编号
     * @param productSn  产品编号
     * @return 容重
     * @throws Exception 查询异常
     */
    BigDecimal getDensity(String contractSn, String productSn) throws Exception;

    /**
     * 查询所有产品信息
     *
     * @return 产品集合
     */
    List<ProductInfoEntity> queryAll();

    /**
     * 根据编号修改数据状态
     * @param snList 编号
     * @param state 状态
     * @return 受影响行数
     */
    Integer changeStateBySN(String[] snList,short state);




}